home *** CD-ROM | disk | FTP | other *** search
/ Creative Computers / Creative Computers CD-ROM, Volume 1 (Legendary Design Technologies, Inc.)(1994).iso / shareware / games / pipeline / pipeline_ii.asm < prev    next >
Assembly Source File  |  1994-11-17  |  57KB  |  2,830 lines

  1.         opt    c-,d-,o1+,o2+,ow-,l+
  2.  
  3. *
  4. *   PIPELINE II
  5. *
  6. *   Written by André Wichmann of CLUSTER in Mar-Apr 1990
  7. *
  8. *   Concept: EMPIRE       (Pipe Mania/Pipe Dream)
  9. *            MASTERTRONIC (Locomotion or something like that)
  10. *
  11. *   This program is FREEWARE ! For further information read the doc-file !
  12. *
  13. *   Improvements made from 14/08/90 to 22/08/90
  14. *   Last update made on 10/12/90
  15. *
  16.  
  17.         incdir    "RAM:include/"
  18.         include    "exec/exec_lib.i"
  19.         include    "Libraries/dos_lib.i"
  20.  
  21. *** Equates
  22.  
  23.         XREF    _Intro        Link it with 'Intro.o'
  24.  
  25. DMACONR        equ    $DFF002
  26. JOY0DAT        equ    $DFF00A
  27. JOY1DAT        equ    $DFF00C
  28. BLTCON0        equ    $DFF040
  29. BLTCON1        equ    $DFF042
  30. BLTAFWM        equ    $DFF044
  31. BLTALWM        equ    $DFF046
  32. BLTCPTH        equ    $DFF048
  33. BLTBPTH        equ    $DFF04C
  34. BLTAPTH        equ    $DFF050
  35. BLTDPTH        equ    $DFF054
  36. BLTSIZE        equ    $DFF058
  37. BLTCMOD        equ    $DFF060
  38. BLTBMOD        equ    $DFF062
  39. BLTAMOD        equ    $DFF064
  40. BLTDMOD        equ    $DFF066
  41. DIWSTRT        equ    $DFF08E
  42. DIWSTOP        equ    $DFF090
  43. DDFSTRT        equ    $DFF092
  44. DDFSTOP        equ    $DFF094
  45. BPL1PTH        equ    $DFF0E0
  46. BPL1PTL        equ    $DFF0E2
  47. BPL2PTH        equ    $DFF0E4
  48. BPL2PTL        equ    $DFF0E6
  49. BPL3PTH        equ    $DFF0E8
  50. BPL3PTL        equ    $DFF0EA
  51. BPL4PTH        equ    $DFF0EC
  52. BPL4PTL        equ    $DFF0EE
  53. BPL5PTH        equ    $DFF0F0
  54. BPL5PTL        equ    $DFF0F2
  55. BPL6PTH        equ    $DFF0F4
  56. BPL6PTL        equ    $DFF0F6
  57. BPL1MOD        equ    $DFF108
  58. BPL2MOD        equ    $DFF10A
  59. BPLCON0        equ    $DFF100
  60. BPLCON1        equ    $DFF102
  61. BPLCON2        equ    $DFF104
  62. DMACONW        equ    $DFF096
  63. DMACON        equ    $DFF096
  64. COLOR00        equ    $DFF180
  65. VHPOSR        equ    $DFF006
  66. CIAAPRA        equ    $BFE001
  67. STARTLIST    equ    38
  68. COP1LC        equ    $DFF080
  69. COPJMP1        equ    $DFF088
  70. SPR0DAT        equ    $DFF144
  71. CHIP        equ    $10002
  72. Planesize    equ    256*40
  73. Planes        equ    5
  74. CLsize        equ    1000*4
  75.  
  76. *** Macros
  77.  
  78.  
  79. ALLOC        MACRO
  80.         move.l    #\1,d0
  81.         move.l    #\2,d1
  82.         CALLEXEC AllocMem
  83.         ENDM
  84. FREE        MACRO
  85.         move.l    \1,a1
  86.         move.l    #\2,d0
  87.         CALLEXEC FreeMem
  88.         ENDM
  89.  
  90. MPRINT        MACRO
  91.         move.l    #1,Text_Flag
  92.         move.l    #3,Text_Delay
  93.         move.l    Plane0,a1
  94.         add.l    #\1*Planesize,a1
  95.         add.l    #\2+\3*40,a1
  96.         lea    \4,a0
  97.         bsr    Print_Text
  98.         ENDM
  99.  
  100. PRINT        MACRO
  101.         move.l    Plane0,a1
  102.         add.l    #\1*Planesize,a1
  103.         add.l    #\2+\3*40,a1
  104.         lea    \4,a0
  105.         bsr    Print_Text
  106.         ENDM
  107.  
  108.         SECTION    "Pipeline",CODE_C
  109.  
  110. ***** Main *****
  111.  
  112.         include "Libraries/Dosextens.i"
  113.     
  114.         movem.l    d0/a0,-(sp)
  115.         clr.l    _WBenchMsg
  116.         sub.l    a1,a1
  117.         CALLEXEC FindTask
  118.         move.l    d0,a4
  119.         tst.l    pr_CLI(a4)
  120.         beq    _WB
  121.         movem.l    (sp)+,d0/a0
  122.         bra    _run
  123. _WB        lea    pr_MsgPort(a4),a0
  124.         CALLEXEC WaitPort
  125.         lea    pr_MsgPort(a4),a0
  126.         CALLEXEC GetMsg
  127.         move.l    d0,_WBenchMsg
  128.         movem.l    (sp)+,d0/a0
  129. _run        jsr    _Intro
  130.         bsr    _main
  131.         move.l    d0,-(sp)
  132.         tst.l    _WBenchMsg
  133.         beq    _Exit
  134.         CALLEXEC Forbid
  135.         move.l    _WBenchMsg(pc),a1
  136.         CALLEXEC ReplyMsg
  137. _Exit        move.l    (sp)+,d0
  138.         rts
  139.  
  140. _WBenchMsg    ds.l    1
  141.  
  142. _Main        bsr    OpenLibs
  143.         sub.l    a1,a1
  144.         CALLEXEC FindTask
  145.         move.l    d0,a0
  146.         move.l    pr_WindowPtr(a0),OldWindow
  147.         move.l    #-1,pr_WindowPtr(a0)
  148.         ALLOC    Planesize*4,CHIP
  149.         move.l    d0,PlayPic
  150.         ALLOC    18*4*2*16,CHIP
  151.         move.l    d0,PlayObj
  152.         ALLOC    48*2*16,CHIP
  153.         move.l    d0,PlayFloat
  154.         ALLOC    512,CHIP
  155.         move.l    d0,PlayFont
  156.         ALLOC    3*130*40,CHIP
  157.         move.l    d0,PipeCluster
  158.         ALLOC    4*232*40,CHIP
  159.         move.l    d0,PipeLogo
  160.         move.l    #Filen_0,d1
  161.         move.l    #1005,d2
  162.         CALLDOS Open
  163.         move.l    d0,d7
  164.         move.l    d7,d1
  165.         move.l    PlayPic,d2
  166.         move.l    #Planesize*4,d3
  167.         CALLDOS Read
  168.         move.l    d7,d1
  169.         CALLDOS Close
  170.         move.l    #Filen_1,d1
  171.         move.l    #1005,d2
  172.         CALLDOS Open
  173.         move.l    d0,d7
  174.         move.l    d7,d1
  175.         move.l    PlayObj,d2
  176.         move.l    #18*4*2*16,d3
  177.         CALLDOS Read
  178.         move.l    d7,d1
  179.         CALLDOS Close
  180.         move.l    #Filen_2,d1
  181.         move.l    #1005,d2
  182.         CALLDOS Open
  183.         move.l    d0,d7
  184.         move.l    d7,d1
  185.         move.l    PlayFloat,d2
  186.         move.l    #48*2*16,d3
  187.         CALLDOS Read
  188.         move.l    d7,d1
  189.         CALLDOS Close
  190.         move.l    #Filen_3,d1
  191.         move.l    #1005,d2
  192.         CALLDOS Open
  193.         move.l    d0,d7
  194.         move.l    d7,d1
  195.         move.l    PlayFont,d2
  196.         move.l    #512,d3
  197.         CALLDOS Read
  198.         move.l    d7,d1
  199.         CALLDOS Close
  200.         move.l    #Filen_4,d1
  201.         move.l    #1005,d2
  202.         CALLDOS Open
  203.         move.l    d0,d7
  204.         move.l    d7,d1
  205.         move.l    PipeCluster,d2
  206.         move.l    #3*130*40,d3
  207.         CALLDOS Read
  208.         move.l    d7,d1
  209.         CALLDOS Close
  210.         move.l    #Filen_5,d1
  211.         move.l    #1005,d2
  212.         CALLDOS Open
  213.         move.l    d0,d7
  214.         move.l    d7,d1
  215.         move.l    PipeLogo,d2
  216.         move.l    #4*232*40,d3
  217.         CALLDOS Read
  218.         move.l    d7,d1
  219.         CALLDOS Close
  220.         move.l    #Filen_6,d1
  221.         move.l    #1005,d2
  222.         CALLDOS Open
  223.         tst.l    d0
  224.         beq    No_Highscores
  225.         move.l    d0,d7
  226.         move.l    d7,d1
  227.         move.l    #HOF,d2
  228.         move.l    #240,d3
  229.         CALLDOS Read
  230.         move.l    d7,d1
  231.         CALLDOS Close
  232. No_Highscores    move.l    #200,d1
  233.         CALLDOS Delay
  234.         bset.b    #1,$bfe001
  235.         jsr    Start_Muzak
  236.         move.l    #2,Difficulty
  237.  
  238. Title        ALLOC    Planesize*Planes,CHIP
  239.         move.l     d0,Plane0
  240.         ALLOC    CLSize,CHIP
  241.         move.l    d0,CLadr
  242.         move.l    d0,a0
  243.         move.l    Plane0,d1
  244.         move.w    #BPL1PTH-$DFF000,d3
  245.         move.w    #Planes-1,d4
  246. Make_CL        move.w     d3,(a0)+
  247.         addq.w    #2,d3
  248.         swap    d1
  249.         move.w    d1,(a0)+
  250.         move.w    d3,(a0)+
  251.         addq.w    #2,d3
  252.         swap     d1
  253.         move.w    d1,(a0)+
  254.         add.l    #Planesize,d1
  255.         dbra    d4,Make_CL
  256.         move.w    #$180,(a0)+
  257.         move.w    #0,(a0)+
  258.         move.l    a0,Target
  259.         move.l    #$fffffffe,(a0)
  260.         
  261.         CALLEXEC Forbid
  262.         move.w    #%0000000111100000,DMACONW
  263.         clr.l    SPR0DAT
  264.         move.l    CLAdr,COP1LC
  265.         clr.w    COPJMP1
  266.         move.w    #$3081,DIWSTRT
  267.         move.w     #$30c1,DIWSTOP
  268.         move.w  #$0038,DDFSTRT
  269.         move.w  #$00d0,DDFSTOP
  270.         move.w  #%0101000000000000,BPLCON0
  271.         clr.w    BPLCON1
  272.         clr.w    BPLCON2
  273.         clr.w    BPL1MOD
  274.         clr.w    BPL2MOD
  275.         move.w    #%1000011111011111,DMACONW
  276.  
  277. Title_Loop    bsr    Clear_Colors
  278.         move.l    Target,a0
  279.         move.l    #$fffffffe,(a0)
  280.         move.l    PipeLogo,a0
  281.         move.l    Plane0,a1
  282.         move.l    #3,d7
  283. Show_Logo_1    move.l    a1,a2
  284.         move.l    #232*40-1,d6
  285. Show_Logo_2    move.b    (a0)+,(a2)+
  286.         dbra    d6,Show_Logo_2
  287.         add.l    #Planesize,a1
  288.         dbra    d7,Show_Logo_1
  289.  
  290.         PRINT    4,0,10,HOFText
  291.         lea    HOFBuffer,a0
  292.         move.l    #39,d0
  293. Clear_HOFB    move.b    #" ",(a0)+
  294.         dbra    d0,Clear_HOFB
  295.  
  296.         lea    HOF,a5
  297.         move.l    #42*40,d6
  298.         move.l    #9,d7
  299. Show_High    move.l    (a5)+,d2
  300.         movem.l    d6/d7/a5,-(sp)
  301.         bsr    BinDec
  302.         movem.l    (sp)+,d6/d7/a5
  303.         lea    HOFBuffer+4,a1
  304.         lea    Dec_Buffer+1,a0
  305.         move.l    #6,d0
  306. Copy_Score    move.b    (a0)+,(a1)+
  307.         dbra    d0,Copy_Score
  308.         move.b    #" ",(a1)+
  309.         move.b    #" ",(a1)+
  310.         move.b    #" ",(a1)+
  311.         move.l    #19,d0
  312. Copy_Name    move.b    (a5)+,(a1)+
  313.         dbra    d0,Copy_Name
  314.         move.b    #0,(a1)+
  315.         movem.l    d6/d7/a5,-(sp)
  316.         move.l    Plane0,a1
  317.         add.l    #4*Planesize,a1
  318.         add.l    d6,a1
  319.         lea    HOFBuffer,a0
  320.         bsr    Print_Text
  321.         movem.l    (sp)+,d6/d7/a5
  322.         add.l    #16*40,d6
  323.         dbra    d7,Show_High
  324.  
  325.         lea    TitleCols_1,a5
  326.         bsr    Fade_In
  327.  
  328.         move.l    #8,d6
  329. TWait1_2    move.l    #$ffff,d7
  330. TWait_1        btst    #7,$BFE001
  331.         beq    StartGame1
  332.         btst    #6,$BFE001
  333.         beq    EndGame1
  334.         dbra    d7,TWait_1
  335.         dbra    d6,TWait1_2
  336.  
  337.         lea    TitleCols_1,a5
  338.         bsr    Fade_Out
  339.  
  340.         bsr    Clear_Colors
  341.         move.l    Plane0,a1
  342.         move.l    #5*Planesize-1,d0
  343. ClearTPlanes    move.b    #0,(a1)+
  344.         dbra    d0,ClearTPlanes
  345.  
  346.         move.l    Target,a0
  347.         move.w    #$400f,d1
  348.         move.w    #$0000,d2
  349.         move.l    #15,d0
  350. Spreadloop_1    move.w    d1,(a0)+
  351.         move.w    #$fffe,(a0)+
  352.         move.w    #$1a0,(a0)+
  353.         move.w    d2,(a0)+
  354.         add.w    #$0110,d2
  355.         add.w    #$0200,d1
  356.         dbra    d0,Spreadloop_1
  357.         move.w    #$d00f,d1
  358.         move.w    #$0ff0,d2
  359.         move.l    #15,d0
  360. Spreadloop_2    move.w    d1,(a0)+
  361.         move.w    #$fffe,(a0)+
  362.         move.w    #$1a0,(a0)+
  363.         move.w    d2,(a0)+
  364.         sub.w    #$0110,d2
  365.         add.w    #$0200,d1
  366.         dbra    d0,Spreadloop_2
  367.  
  368.         move.l    #$fffffffe,(a0)
  369.  
  370.         move.l    PipeCluster,a0
  371.         move.l    Plane0,a1
  372.         add.l    #40*40,a1
  373.         move.l    #2,d7
  374. Show_Logo_3    move.l    a1,a2
  375.         move.l    #130*40-1,d6
  376. Show_Logo_4    move.b    (a0)+,(a2)+
  377.         dbra    d6,Show_Logo_4
  378.         add.l    #Planesize,a1
  379.         dbra    d7,Show_Logo_3
  380.         lea    TitleCols_2,a5
  381.         bsr    Fade_In
  382.  
  383.         move.l    #Scroll,Scrollptr
  384.         move.l    #1,Scrflag
  385.         bsr    Wait_Blt
  386.         move.w    #$ffff,BLTAFWM
  387.         move.w    #$ffff,BLTALWM
  388.         clr.w    BLTCON1
  389.         move.w    #%0000100111110000,BLTCON0
  390.  
  391. TwoLoop_1    move.l    #2,d1
  392.         move.b    #$ff,d2
  393. TwoLoop_2    move.w    VHPOSR,d0
  394.         lsr.w    #8,d0
  395.         cmp.b    d2,d0
  396.         bne    TwoLoop_2
  397.         subq.l    #1,d2
  398.         dbra    d1,TwoLoop_2
  399.  
  400.         move.l    Plane0,a0
  401.         add.l    #4*Planesize,a0
  402.         add.l    #20*40,a0
  403.         move.l    a0,BLTDPTH
  404.         add.l    #1*40,a0
  405.         move.l    a0,BLTAPTH
  406.         clr.w    BLTAMOD
  407.         clr.w    BLTDMOD
  408.         move.w    #180*64+20,BLTSIZE
  409.         bsr    Wait_Blt
  410.         btst    #7,$BFE001
  411.         beq    StartGame2
  412.         btst    #6,$BFE001
  413.         beq    EndGame2
  414.         subq.l    #1,Scrflag
  415.         tst.l    Scrflag
  416.         bne    TwoLoop_1
  417.         move.l    #8,Scrflag
  418.         move.l    Scrollptr,a0
  419.         lea    HOFBuffer,a1
  420.         move.l    #39,d0
  421. CopyLine    move.b    (a0)+,(a1)+
  422.         dbra    d0,CopyLine
  423.         move.b    #0,(a1)
  424.         move.l    Plane0,a1
  425.         add.l    #4*Planesize,a1
  426.         add.l    #190*40,a1
  427.         lea    HOFBuffer,a0
  428.         bsr    Print_text
  429.         add.l    #40,Scrollptr
  430.         move.l    Scrollptr,a0
  431.         cmp.b    #0,(a0)
  432.         bne    TwoLoop_1
  433.  
  434.         lea    TitleCols_2,a5
  435.         bsr    Fade_Out
  436.         bra    Title_Loop
  437.  
  438. Wait_Blt    btst    #14,DMACONR
  439.         bne    Wait_Blt
  440.         rts
  441.  
  442. StartGame1    lea    TitleCols_1,a5
  443.         bsr    Fade_Out
  444.         bra    StartGame
  445.  
  446. EndGame1    lea    TitleCols_1,a5
  447.